<!DOCTYPE HTML>
<html>
<head>
  <title>给指定客户端发送信息</title>
</head>

<body>
发送的用户ID: <input id="sid" type="text" /><br/>
消息: <input id="text" type="text" /><br/>
<button onclick="send()">Send</button>
<button onclick="closeWebSocket()">Close</button>
<div id="message"></div>
</body>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">

  var websocket = null;
  //  生成  随机ID
  var sid = parseInt(Math.random() * 100 + 1,10) +1
  console.log("随机id： ",sid)
  //判断当前浏览器是否支持WebSocket, 主要此处要更换为自己的地址
  if ('WebSocket' in window) {
    websocket = new WebSocket("ws://localhost:9000/webSocketOneToOne/"+30);
  } else {
    alert('Not support websocket')
  }

  //连接发生错误的回调方法
  websocket.onerror = function() {
    setMessageInnerHTML("error");
  };

  //连接成功建立的回调方法
  websocket.onopen = function(event) {
    //setMessageInnerHTML("open");
  }

  //接收到消息的回调方法
  websocket.onmessage = function(event) {
    setMessageInnerHTML(event.data);
  }

  //连接关闭的回调方法
  websocket.onclose = function() {
    setMessageInnerHTML("close");
  }

  //监听窗口关闭事件，当窗口关闭时，主动去关闭websocket连接，防止连接还没断开就关闭窗口，server端会抛异常。
  window.onbeforeunload = function() {
    websocket.close();
  }

  //将消息显示在网页上
  function setMessageInnerHTML(innerHTML) {
    document.getElementById('message').innerHTML += innerHTML + '<br/>';
  }

  //关闭连接
  function closeWebSocket() {
    websocket.close();
  }

  //发送消息
  function send() {
    // 发送 消息
    var data = {};
    data["to"] = $("#sid").val();
    data["text"] = $("#text").val();
    var res = JSON.stringify(data)
    console.log(res)
    console.log("state: ",websocket.readyState);
    // websocket state
    // 通常在实例化一个websocket对象之后，客户端就会与服务器进行连接。但是连接的状态是不确定的，
    // 于是用readyState属性来进行标识。它有四个值，分别对应不同的状态：
    // CONNECTING：值为0，表示正在连接；
    // OPEN：值为1，表示连接成功，可以通信了；
    // CLOSING：值为2，表示连接正在关闭；
    // CLOSED：值为3，表示连接已经关闭，或者打开连接失败。
    if (websocket.readyState === 1){
      websocket.send(res);
    }

  }

</script>
</html>